import router from "@/router";
import { userLoginStore } from "@/store/userStore";
import AccessEnum from "@/access/accessEnum";
import checkAccess from "@/access/checkAccess";

/**
 * 进入页面前，进行一个权限校验
 * checkAccess这个是检查是否有权限的方法
 * 这个函数是通过当前见面的路由的标签meta来判断是否有权限进入
 */
router.beforeEach(async (to, from, next) => {
  //获取当前登录用户
  const loginUserStore = userLoginStore();
  let loginUser = loginUserStore.loginUser;
  // 如果之前没有尝试获取过登录用户信息，才自动登录
  if (!loginUser || !loginUser.userRole) {
    // 加 await 是为了等待用户登录成功并获取到值后，再执行后续操作
    await loginUserStore.fetchLoginUser();
    loginUser = loginUserStore.loginUser;
  }
  //获取当前页面的权限
  const needAccess = (to.meta?.access as string) ?? AccessEnum.NOT_LOGIN; //默认不需要登录
  //获取当前登录用户的权限
  const userAccess = loginUser?.userRole ?? AccessEnum.NOT_LOGIN;
  //如果当前页面需要登录
  if (needAccess !== AccessEnum.NOT_LOGIN) {
    //判断当前用户是否登录
    if (!loginUserStore || !loginUser || userAccess === AccessEnum.NOT_LOGIN) {
      next("/user/login?redirect=" + to.fullPath);
    }
    //如果登录，就判断是否有权限
    if (!checkAccess(loginUser, needAccess)) {
      next("/noAuth");
      return;
    }
  }
  next();
});
